﻿using System.Diagnostics.Contracts;
using System.Reactive.Concurrency;

namespace System.Reactive.Linq
{
	public static partial class Observable
	{
#if !WINDOWS_PHONE
		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8>(this Action<T1, T2, T3, T4, T5, T6, T7, T8> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7>(this Action<T1, T2, T3, T4, T5, T6, T7> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6>(this Action<T1, T2, T3, T4, T5, T6> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5>(this Action<T1, T2, T3, T4, T5> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<Unit>>>() != null");
			return null;
		}
#endif

		public static Func<T1, T2, T3, T4, IObservable<Unit>> ToAsync<T1, T2, T3, T4>(this Action<T1, T2, T3, T4> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, IObservable<Unit>> ToAsync<T1, T2, T3>(this Action<T1, T2, T3> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, IObservable<Unit>> ToAsync<T1, T2>(this Action<T1, T2> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<TSource, IObservable<Unit>> ToAsync<TSource>(this Action<TSource> action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<TSource, IObservable<Unit>>>() != null, null, "Contract.Result<Func<TSource, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<IObservable<Unit>> ToAsync(this Action action)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Ensures(Contract.Result<Func<IObservable<Unit>>>() != null, null, "Contract.Result<Func<IObservable<Unit>>>() != null");
			return null;
		}

#if !WINDOWS_PHONE
		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, TResult>(this Func<T1, T2, T3, T4, T5, T6, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, TResult>(this Func<T1, T2, T3, T4, T5, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<TResult>>>() != null");
			return null;
		}
#endif

		public static Func<T1, T2, T3, T4, IObservable<TResult>> ToAsync<T1, T2, T3, T4, TResult>(this Func<T1, T2, T3, T4, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, IObservable<TResult>> ToAsync<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, IObservable<TResult>> ToAsync<T1, T2, TResult>(this Func<T1, T2, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T, IObservable<TResult>> ToAsync<T, TResult>(this Func<T, TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<T, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<IObservable<TResult>> ToAsync<TResult>(this Func<TResult> function)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Ensures(Contract.Result<Func<IObservable<TResult>>>() != null, null, "Contract.Result<Func<IObservable<TResult>>>() != null");
			return null;
		}

#if !WINDOWS_PHONE
		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9>(this Action<T1, T2, T3, T4, T5, T6, T7, T8, T9> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8>(this Action<T1, T2, T3, T4, T5, T6, T7, T8> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6, T7>(this Action<T1, T2, T3, T4, T5, T6, T7> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5, T6>(this Action<T1, T2, T3, T4, T5, T6> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, IObservable<Unit>> ToAsync<T1, T2, T3, T4, T5>(this Action<T1, T2, T3, T4, T5> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<Unit>>>() != null");
			return null;
		}
#endif

		public static Func<T1, T2, T3, T4, IObservable<Unit>> ToAsync<T1, T2, T3, T4>(this Action<T1, T2, T3, T4> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, IObservable<Unit>> ToAsync<T1, T2, T3>(this Action<T1, T2, T3> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, T3, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<T1, T2, IObservable<Unit>> ToAsync<T1, T2>(this Action<T1, T2> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, IObservable<Unit>>>() != null, null, "Contract.Result<Func<T1, T2, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<TSource, IObservable<Unit>> ToAsync<TSource>(this Action<TSource> action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<TSource, IObservable<Unit>>>() != null, null, "Contract.Result<Func<TSource, IObservable<Unit>>>() != null");
			return null;
		}

		public static Func<IObservable<Unit>> ToAsync(this Action action, IScheduler scheduler)
		{
			Contract.Requires(action != null, null, "action != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<IObservable<Unit>>>() != null, null, "Contract.Result<Func<IObservable<Unit>>>() != null");
			return null;
		}

#if !WINDOWS_PHONE
		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, T8, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, T8, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, T7, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, T7, TResult>(this Func<T1, T2, T3, T4, T5, T6, T7, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, T7, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, T6, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, T6, TResult>(this Func<T1, T2, T3, T4, T5, T6, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, T6, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, T4, T5, IObservable<TResult>> ToAsync<T1, T2, T3, T4, T5, TResult>(this Func<T1, T2, T3, T4, T5, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, T5, IObservable<TResult>>>() != null");
			return null;
		}
#endif

		public static Func<T1, T2, T3, T4, IObservable<TResult>> ToAsync<T1, T2, T3, T4, TResult>(this Func<T1, T2, T3, T4, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, T4, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, T4, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, T3, IObservable<TResult>> ToAsync<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, T3, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, T3, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T1, T2, IObservable<TResult>> ToAsync<T1, T2, TResult>(this Func<T1, T2, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T1, T2, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T1, T2, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<T, IObservable<TResult>> ToAsync<T, TResult>(this Func<T, TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<T, IObservable<TResult>>>() != null, null, "Contract.Result<Func<T, IObservable<TResult>>>() != null");
			return null;
		}

		public static Func<IObservable<TResult>> ToAsync<TResult>(this Func<TResult> function, IScheduler scheduler)
		{
			Contract.Requires(function != null, null, "function != null");
			Contract.Requires(scheduler != null, null, "scheduler != null");
			Contract.Ensures(Contract.Result<Func<IObservable<TResult>>>() != null, null, "Contract.Result<Func<IObservable<TResult>>>() != null");
			return null;
		}
	}
}